package com.example.demo.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * https://leetcode.cn/problems/pascals-triangle/description/?envType=study-plan-v2&envId=top-100-liked
 */
public class _70_杨辉三角 {


    /**
     * 时间复杂度：O(n<sup>2</sup>)  双层循环遍历
     * <p>
     * 空间复杂度：O(n<sup>2</sup>)  每行所需的的空间为numRows ，所以就是 1+2+3+4+...+numRows; 就是∑求和
     *
     * @param numRows 行数
     * @return
     */
    public List<List<Integer>> generate(int numRows) {

        List<List<Integer>> res = new ArrayList<>();

        List<Integer> row1 = new ArrayList<>();
        row1.add(1);
        res.add(row1);
        if (numRows == 1) {
            return res;
        }

        List<Integer> row2 = new ArrayList<>();
        row2.add(1);
        row2.add(1);
        res.add(row2);
        if (numRows == 2) {
            return res;
        }

        for (int i = 3; i <= numRows; i++) {
            List<Integer> temp = res.get(i - 2);
            List<Integer> row = new ArrayList<>();
            for (int j = 0; j < i; j++) {
                if (j == 0 || j == i - 1) {
                    row.add(1);
                } else {
                    row.add(temp.get(j) + temp.get(j - 1));
                }
            }
            res.add(row);
        }
        return res;
    }

}
